{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 10. Approximate Inference"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import matplotlib.animation as animation\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "%matplotlib inline\n",
    "\n",
    "from prml.rv import VariationalGaussianMixture\n",
    "from prml.features import PolynomialFeatures\n",
    "from prml.linear import (\n",
    "    VariationalLinearRegressor,\n",
    "    VariationalLogisticRegressor\n",
    ")\n",
    "\n",
    "np.random.seed(1234)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 10.2 Illustration: Variational Mixture of Gaussians"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x1 = np.random.normal(size=(100, 2))\n",
    "x1 += np.array([-5, -5])\n",
    "x2 = np.random.normal(size=(100, 2))\n",
    "x2 += np.array([5, -5])\n",
    "x3 = np.random.normal(size=(100, 2))\n",
    "x3 += np.array([0, 5])\n",
    "x_train = np.vstack((x1, x2, x3))\n",
    "\n",
    "x0, x1 = np.meshgrid(np.linspace(-10, 10, 100), np.linspace(-10, 10, 100))\n",
    "x = np.array([x0, x1]).reshape(2, -1).T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x119d8d1d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "vgmm = VariationalGaussianMixture(n_components=6)\n",
    "vgmm.fit(x_train)\n",
    "\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=vgmm.classify(x_train))\n",
    "plt.contour(x0, x1, vgmm.pdf(x).reshape(100, 100))\n",
    "plt.xlim(-10, 10, 100)\n",
    "plt.ylim(-10, 10, 100)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"432\" height=\"288\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAA4i21kYXQAAAKtBgX//6ncRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQ4IHIyNzQ4IDk3ZWFlZjIgLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE2IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9NiBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49NSBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNo\n",
       "PTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFw\n",
       "bWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAHHpliIQA\n",
       "E//+97GPgU3IAA2XOop6H+EVsfSQUXqx2aBk6gAAAwAAiYGOFk1v/DePP8ACfh5Xq2UW7oJ52Pbc\n",
       "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\n",
       "MS4xMDA=\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<matplotlib.animation.ArtistAnimation at 0x11a1c69e8>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vgmm = VariationalGaussianMixture(n_components=6)\n",
    "vgmm._init_params(x_train)\n",
    "params = np.hstack([param.flatten() for param in vgmm.get_params()])\n",
    "fig = plt.figure()\n",
    "colors = np.array([\"r\", \"orange\", \"y\", \"g\", \"b\", \"purple\"])\n",
    "frames = []\n",
    "for _ in range(100):\n",
    "    plt.xlim(-10, 10)\n",
    "    plt.ylim(-10, 10)\n",
    "    plt.gca().set_aspect('equal', adjustable='box')\n",
    "    r = vgmm._variational_expectation(x_train)\n",
    "    imgs = [plt.scatter(x_train[:, 0], x_train[:, 1], c=colors[np.argmax(r, -1)])]\n",
    "    for i in range(vgmm.n_components):\n",
    "        if vgmm.component_size[i] > 1:\n",
    "            imgs.append(plt.scatter(vgmm.mu[i, 0], vgmm.mu[i, 1], 100, colors[i], \"X\", lw=2, edgecolors=\"white\"))\n",
    "    frames.append(imgs)\n",
    "    vgmm._variational_maximization(x_train, r)\n",
    "    new_params = np.hstack([param.flatten() for param in vgmm.get_params()])\n",
    "    if np.allclose(new_params, params):\n",
    "        break\n",
    "    else:\n",
    "        params = np.copy(new_params)\n",
    "plt.close()\n",
    "plt.rcParams['animation.html'] = 'html5'\n",
    "anim = animation.ArtistAnimation(fig, frames)\n",
    "anim"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 10.3 Variational Linear Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def create_toy_data(func, sample_size, std, domain=[0, 1]):\n",
    "    x = np.linspace(domain[0], domain[1], sample_size)\n",
    "    np.random.shuffle(x)\n",
    "    t = func(x) + np.random.normal(scale=std, size=x.shape)\n",
    "    return x, t\n",
    "\n",
    "def cubic(x):\n",
    "    return x * (x - 5) * (x + 5)\n",
    "\n",
    "x_train, y_train = create_toy_data(cubic, 10, 10., [-5, 5])\n",
    "x = np.linspace(-5, 5, 100)\n",
    "y = cubic(x)\n",
    "\n",
    "feature = PolynomialFeatures(degree=3)\n",
    "X_train = feature.transform(x_train)\n",
    "X = feature.transform(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nKAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11a1f1208>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "vlr = VariationalLinearRegressor(beta=0.01)\n",
    "vlr.fit(X_train, y_train)\n",
    "y_mean, y_std = vlr.predict(X, return_std=True)\n",
    "plt.scatter(x_train, y_train, s=100, facecolor=\"none\", edgecolor=\"b\")\n",
    "plt.plot(x, y, c=\"g\", label=\"$\\sin(2\\pi x)$\")\n",
    "plt.plot(x, y_mean, c=\"r\", label=\"prediction\") \n",
    "plt.fill_between(x, y_mean - y_std, y_mean + y_std, alpha=0.2, color=\"pink\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 10.6 Variational Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def create_toy_data(add_outliers=False, add_class=False):\n",
    "    x0 = np.random.normal(size=50).reshape(-1, 2) - 3.\n",
    "    x1 = np.random.normal(size=50).reshape(-1, 2) + 3.\n",
    "    return np.concatenate([x0, x1]), np.concatenate([np.zeros(25), np.ones(25)]).astype(np.int)\n",
    "x_train, y_train = create_toy_data()\n",
    "x0, x1 = np.meshgrid(np.linspace(-7, 7, 100), np.linspace(-7, 7, 100))\n",
    "x = np.array([x0, x1]).reshape(2, -1).T\n",
    "feature = PolynomialFeatures(degree=1)\n",
    "X_train = feature.transform(x_train)\n",
    "X = feature.transform(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11a6208d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "vlr = VariationalLogisticRegressor()\n",
    "vlr.fit(X_train, y_train)\n",
    "y = vlr.proba(X).reshape(100, 100)\n",
    "\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x0, x1, y, np.array([0., 0.01, 0.1, 0.25, 0.5, 0.75, 0.9, 0.99, 1.]), alpha=0.2)\n",
    "plt.colorbar()\n",
    "plt.xlim(-7, 7)\n",
    "plt.ylim(-7, 7)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
